package primary.primary0;

/**
 *
 */
public class S0019删除链表的倒数第n个节点 {
    /**
     * 100, 注意想删除一个节点, 肯定是需要有他的上一个节点的, 这里直接拿到上一个节点, 边界条件不难所以没怎么struggle
     * 然后还有虚假的头节点
     */
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fakeHead = new ListNode();
        fakeHead.next = head;
        searchForNth(fakeHead, n);
        return fakeHead.next;
    }


    private int searchForNth(ListNode node, int curNum){
        // 注意这里, 先是对每一个节点执行了下面三个语句, 再一层层跳出来返回的;
        int res = curNum;
        if(node.next != null){
            res = searchForNth(node.next, curNum);
            if(res == 0){
                // 需要删除这个节点的下一个节点
                node.next = node.next.next;
            }
        }
        return res - 1;
    }
}
